//package org.example.Redis.Service;
//
//import com.fasterxml.jackson.core.type.TypeReference;
//
//import java.util.*;
//import java.util.concurrent.TimeUnit;
//
///**
// * @Author : zhangbo
// * @data : 2024/7/4
// * @description :
// */
//public interface RedisService {
//    Object executeLua(String lua, List<String> keys, List<String> args);
//    Object put();
//    void put(Map<String,Object>map);
//
//    boolean setString(final String key, String value);
//
//    boolean setString(final String key, String value, long expireSeconds);
//
//    Object executeLuaSha(String lua, List<String> keys, List<String> args);
//
//    Object executeLoadLua(String luaScript);
//    /**
//     * rangeList 获取list
//     * @return
//     */
//    List<String> rangeList(String key);
//
//    /**
//     * 批量删除对应的value
//     *
//     * @param keys
//     * @author penghuiping
//     * @Timer 2016/12/17.
//     */
//    public void remove(final String... keys);
//
//
//    /**
//     * 删除对应的value
//     *
//     * @param key
//     * @author penghuiping
//     * @Timer 2016/12/17.
//     */
//    public void remove(final String key);
//
//    /**
//     * 根据正则模糊搜索key 后删除
//     * @param pattern 正则表达式
//     */
//    public void removeByVague(final String pattern);
//
//    /**
//     * 删除hash中的某些键
//     * @param key
//     * @param hashKey
//     */
//    public void removeHashValue(String key, Object... hashKey);
//
//    /**
//     * 判断缓存中是否有对应的value
//     *
//     * @param key
//     * @return
//     * @author penghuiping
//     * @Timer 2016/12/17.
//     */
//    public boolean exists(final String key);
//
//    /**
//     * 判断hashkey是否存在
//     * @param key
//     * @return
//     */
//    boolean hExists(final String key);
//
//    /**
//     * 读取缓存
//     *
//     * @param key
//     * @param cls
//     * @return
//     * @author penghuiping
//     * @date 2016/12/17.
//     */
//    public <T> T get(final String key, Class<T> cls);
//
//    /**
//     * 读取缓存
//     *
//     * @param key
//     * @param cls
//     * @param <T>
//     * @return
//     */
//    public <T> T get(final String key, TypeReference<T> cls);
//
//    /**
//     * 读取缓存
//     *
//     * @param key
//     * @return
//     */
//    String getString(final String key);
//
//    /**
//     * 写入缓存
//     *
//     * @param key
//     * @param value
//     * @return
//     * @author penghuiping
//     * @Timer 2016/12/17.
//     */
//    public boolean set(final String key, Object value);
//
//    /**
//     * 在key不存在的情况下写入缓存
//     *
//     * @param key
//     * @param value
//     * @return
//     */
//    public boolean setNx(final String key, Object value);
//
//    /**
//     * 写入缓存
//     *
//     * @param key
//     * @param value
//     * @param expireTime 单位秒
//     * @return
//     * @author penghuiping
//     * @Timer 2016/12/17.
//     */
//    public boolean set(final String key, Object value, Long expireTime);
//
//    /**
//     * 根据key获取存活时间
//     *
//     * @param key
//     * @return
//     */
//    public Long remainTimeToLive(final String key);
//
//    /**
//     * 设置一个key的存活时间
//     *
//     * @param key
//     * @param expireTime
//     * @param timeUnit
//     * @return
//     */
//    public Boolean expire(final String key, Long expireTime, TimeUnit timeUnit);
//
//    /**
//     * 在制定日期过期
//     *
//     * @param key  redis key
//     * @param date 过期时间点
//     * @return
//     */
//    public void expireAt(final String key, Date date);
//
//    /**
//     * 根据指定key获取自增的id
//     *
//     * @param key
//     * @return
//     */
//    public Long incr(final String key);
//
//    Long incrBy(final String key, long value);
//
//    Long decr(final String key);
//
//    Long decrBy(final String key, long value);
//
//
//    public Map getMap(String key);
//
//
//    /**
//     * 哈希添加数据
//     *
//     * @param key     key 值
//     * @param hashKey 哈希key
//     * @param value
//     */
//    public boolean addHashSet(String key, Object hashKey, Object value);
//
//    /**
//     * 批量插入hash表
//     * @param key key
//     * @param hashKeyAndValue hash表每一条记录的key and value
//     * @return
//     */
//    public boolean batchAddHashSet(String key, Map<String,String> hashKeyAndValue);
//
//    /**
//     * 根据hashKey获取数据
//     *
//     * @param key     key 值
//     * @param hashKey 哈希key
//     * @return
//     */
//    public Object getHashSet(String key, Object hashKey);
//
//
//    /**
//     * 根据指定hashKey值自增value(1,2,3,4...);
//     *
//     * @param key     key 值
//     * @param hashKey 哈希key
//     * @param value   起始值
//     * @return
//     */
//    public Long hincrBy(String key, Object hashKey, Long value);
//
//    /**
//     * 根据key与hashkey删除hash中的某个值
//     * @param key   key值
//     * @param hashKey 哈希key
//     * @return 删除个数
//     */
//    public Long delHashByKey(String key,Object hashKey);
//
//    /**
//     * 获取hash 大小
//     * @param key
//     * @return
//     */
//    Long hashSize(String key);
//
//    /**
//     * 集合添加数据
//     *
//     * @param key
//     * @param value
//     * @return
//     */
//    public boolean addSet(String key, String... value);
//
//    /**
//     * 集合获取数据
//     *
//     * @param key
//     * @return
//     */
//    public Set<String> getSet(String key);
//
//    /**
//     * 删除set中的某些数据
//     * @param key
//     * @param value
//     * @return
//     */
//    Long removeSetValue(String key, String... value);
//
//    /**
//     * 获取集合的大小
//     *
//     * @param key
//     * @return
//     */
//    public Long getSetSize(String key);
//
//    /**
//     * 根据key值随机获取集合中一个值，得到该值之后并删除该值
//     *
//     * @param key
//     * @return
//     */
//    public String getOneSet(String key);
//
//
//    /**
//     * 将一个或多个值插入到列表头部
//     * @param key
//     * @param values
//     * @return
//     */
//    Object lpush(String key, String... values);
//
//    /**
//     * 将一个或多个值插入到列表尾部
//     * @param key
//     * @param values
//     * @return
//     */
//    Object rpush(String key, String... values);
//
//    /**
//     * 将string集合插入list中
//     * @param key key
//     * @param stringCollection string集合值
//     * @param expireDate 过期时间
//     * @return
//     */
//    Long lpushAll(String key, Collection<String> stringCollection, Date expireDate);
//
//    /**
//     * list推入redis  rightPush
//     * @param key
//     * @param stringCollection
//     * @param expireTime
//     * @param timeUnit
//     * @return
//     */
//    Long rpushAll(String key, Collection<String> stringCollection, Long expireTime, TimeUnit timeUnit);
//
//    /**
//     * rangeList 获取list
//     * @param key
//     * @param start list index 0开始
//     * @param end
//     * @return
//     */
//    List<String> rangeList(String key, Long start, Long end);
//
//    /**
//     * 获取list大小
//     * @param key
//     * @return
//     */
//    Long listSize(String key);
//
//    /**
//     * list中获取一个
//     * @param key
//     * @return
//     */
//    String lpopOne(String key);
//
//    /**
//     * list头部获取一个, 如果没有，阻塞指定时间
//     * @param key key
//     * @param num 时间
//     * @param timeUnit 时间单位
//     * @return
//     */
//    String lpopOneBlock(String key, long num, TimeUnit timeUnit);
//
//    /**
//     * list中获取一个
//     * @param key
//     * @return
//     */
//    String rpopOne(String key);
//
//    /**
//     * list尾部获取一个, 如果没有，阻塞指定时间
//     * @param key key
//     * @param num 时间
//     * @param timeUnit 时间单位
//     * @return
//     */
//    String rpopOneBlock(String key, long num, TimeUnit timeUnit);
//
//    /**
//     * 获取list 指定index数据
//     * @param key
//     * @param index
//     * @return
//     */
//    String listIdx(String key, Long index);
//
//    /**
//     * 获取剩余的有效时间
//     * @param key
//     * @return
//     */
//    Long ttl(String key);
//
//    /**
//     * 防重锁
//     * @param key
//     * @return
//     */
//    boolean repeatLock(String key);
//
//    /**
//     * 防重锁
//     * @param key
//     * @return
//     */
//    boolean repeatLock(String key, Long seconds);
//
//
//    /**
//     * 自定义并发锁
//     *
//     * @param redisKey   锁KEY
//     * @param sleepTime  线程等待时间
//     * @param expireTime 持锁时间
//     * @param circulate  等待次数
//     * @return
//     */
//    boolean repeatWaitCheck(String redisKey,Long sleepTime,Long expireTime,int circulate);
//
//
//    /**
//     * 并发锁
//     *
//     * @param redisKey 锁KEY
//     * @return
//     */
//    boolean repeatWaitCheck(String redisKey);
//
//
//    /**
//     * zset 自增某zKey中sKey的score,并返回他的值
//     *
//     * @param zKey
//     * @param sKey
//     * @param score
//     * @return redis中的值
//     */
//    Double zIncrBy(String zKey,Object sKey,Double score);
//
//    /**
//     * 判断set中是否存在该值
//     * @param key
//     * @param member
//     * @return
//     */
//    boolean existSet(String key, String member);
//
//
//    /**
//     * 获取整个HashSet
//     *
//     * @param key
//     * @return
//     */
//    Map<Object,Object> getHashSetAll(String key);
//
//    Map<String,String> getHashSetAllStr(String key);
//
//
//    /**
//     * 查询排行榜
//     *
//     * @param key key
//     * @param end limit
//     * @return key的id
//     */
//    Set<String> getRankKeyWithEnd(String key,Long end);
//
//
//    /**
//     * 排行榜
//     *
//     * @param key zset的KEY
//     * @param zKey 排行的KEY
//     * @return 删除成功返回ture,错误返回false
//     */
//    boolean zRemoveKey(String key,String zKey);
//
//    /**
//     * 判断zSet中key是否存在
//     *
//     * @param key
//     * @param zKey
//     * @return
//     */
//    boolean zExist(String key,String zKey);
//
//    /**
//     * 设置位图
//     *
//     * @param key
//     * @param offset
//     * @param value
//     * @return
//     */
//    boolean setBit(String key,long offset, boolean value);
//
//
//    /**
//     * 统计个数
//     *
//     * @param key
//     * @return
//     */
//    Long countBit(String key);
//
//
//    /**
//     * 获取过期时间
//     *
//     * @param key
//     * @return
//     */
//    Long getExpire(String key);
//
//
//    /**
//     * 多操作LUA脚本执行
//     *
//     * @param lua LUA脚本
//     * @param key REDIS KEY
//     * @param opKey 操作 KEY
//     * @param param 参数对象
//     * @return 执行结果
//     */
//    Object executeMultipleLua(String lua,String key,String opKey,String param);
//
//
//    /**
//     * 单操作LUA脚本执行
//     *
//     * @param lua LUA脚本
//     * @param key REDIS KEY
//     * @param param 参数对象
//     * @return 执行结果
//     */
//    Object executeSingleLua(String lua,String key,Object param);
//}
